package com.aauedu.springboot.exception;

import lombok.extern.slf4j.Slf4j;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.server.MethodNotAllowedException;

import java.lang.reflect.Method;

/*
**
 * @ControllerAdvice：使用它可以标识一个全局异常处理器/对象
 * 会注入到Spring容器
*/


//全局异常处理器
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {

    //1、编写方法，处理指定异常，比如我们处理算算术异常和空指针异常，可以指定多个异常
    //2、这里要处理的异常，由程序员来定
    //3、Exception e：表示异常发生后，传递的异常对象
    //4、Model model：可以将我们的异常信息，放入Model，并传递给显示页面
    //提出一个问题，如何获取到异常发生的方法（通过debug的方式，解决如何获取？好的思路idea）
    @ExceptionHandler(value = {ClassNotFoundException.class, ArithmeticException.class, NullPointerException.class, MethodNotAllowedException.class, AccessException.class})
    public String handleArithmeticException(Exception e, Model model, HandlerMethod handlerMethod) {
        log.info("异常信息:{}", e.getMessage());
        log.info("异常发生的方法:{}", handlerMethod.getMethod());
        System.out.println("哈哈");
        //这里的异常信息放入Model，可以在错误页面取出
        model.addAttribute("message", e.getMessage());
        //获取异常发生的方法
        return "/error/global"; //视图地址
    }

}
